#include <iostream>
#include <fstream>
#include <limits>
#include <cmath>
#include <vector>
#include <algorithm>
#include <Windows.h>
#include "MST.h"
#include <stdio.h>
#include <Windows.h>
#include <windowsx.h>
#include <WinGDI.h>
using std::pair;


using namespace std;

int main()
{
		Point center=Point(0, 0);
		RandomGraph rg=RandomGraph(center, 10, 10, 5, 5);
		vector<pair<int, int>> edges;
		vector<vector<int>> vert;
		MST mst=MST(rg);
		mst.getPrim(edges, vert);
		//mst.getKr(edges);
		vector<int> way;
		mst.eulerianPath(vert, way); // получили обход дерева
		vector<int> eupath; // выкидываем повторяющиеся вершины
		vector<bool> used;
		for (int i=0; i<rg.size(); i++) {
			used.push_back(false);
		}
		for (int i=0; i<way.size(); i++) {
			if (!used[way[i]]) {
				eupath.push_back(way[i]);
				used[way[i]]=true;
			}
		}
		//MST_BGr.show();
		//cout<<"It's done "<<edges.size()<<" || "<<way.size()<<" || "<<eupath.size()<<endl;

		//Point lal=rg.getVertex(0);


		printf("Done. Press Enter to draw the picture\n");

        getchar();

        ///////////// Ðèñóåì êàðòèíêó ïîâåðõ âñåõ îêîí //////////////
        Sleep(200);
        HDC hDC = GetDC(NULL);
        Rectangle(hDC, 0, 0, 2000, 2000 );
        HPEN pen1 = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
        SelectPen(hDC, pen1);
        
        for ( int i = 0; i < rg.size(); ++i ) {
                
                int x = 2.0 * rg.getVertex(i).x + 600; // Óìíîæüòå íå íà 2, à íà äðóãîå ÷èñëî äëÿ íàñòðîéêè
                int y = 2.0 * rg.getVertex(i).y + 350; // Ïðèáàâüòå íå 600 è 350, à äðóãèå ÷èñëà äëÿ íàñòðîéêè
                
                //SetPixel( hDC, x, y, RGB(0,0,0));  Ðèñóéòå òàêèì îáðàçîì åñëè õîòèòå áîëüøóþ ñêîðîñòü
                
                MoveToEx(hDC, x, y, 0);
                LineTo(hDC, x+1, y+1);
        }

        HPEN pen2 = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
        SelectPen(hDC, pen2);
        
		int eusize=eupath.size();
        for ( int i = 0; i < eupath.size(); ++i ) {
                
                int x1 = 2.0 * rg.getVertex(eupath[i]).x + 600; // Óìíîæüòå íå íà 2, à íà äðóãîå ÷èñëî äëÿ íàñòðîéêè
                int y1 = 2.0 * rg.getVertex(eupath[i]).y + 350; // Ïðèáàâüòå íå 600 è 350, à äðóãèå ÷èñëà äëÿ íàñòðîéêè
                int x2 = 2.0 * rg.getVertex(eupath[(i+1) % eusize]).x + 600;
                int y2 = 2.0 * rg.getVertex(eupath[(i+1) % eusize]).y + 350;

                MoveToEx(hDC, x1, y1, 0);
                LineTo(hDC, x2, y2);
                //Sleep(100);
        }
         
        system("pause");
        return 0;
}